package com.stt.videoprocess.design.processor.impl;

import com.stt.videoprocess.design.model.VideoTask;
import com.stt.videoprocess.design.processor.VideoProcessor;
import lombok.extern.slf4j.Slf4j;

/**
 * 水印处理装饰器
 * 实现具体的水印添加功能
 */
@Slf4j
public class WatermarkProcessor implements VideoProcessor {
    // 定义一个私有最终变量VideoProcessor类型的processor，用于实际的视频处理任务
    private final VideoProcessor processor;

    /**
     * 构造函数，接收一个VideoProcessor类型的参数processor
     * 用途：初始化WatermarkProcessor实例时，传入实际的视频处理对象
     * 参数：
     *   processor - 实现了VideoProcessor接口的对象，用于后续的视频处理
     */
    public WatermarkProcessor(VideoProcessor processor) {
        this.processor = processor;
    }

    /**
     * 实现了处理视频任务的方法，添加了数字水印的前置处理步骤
     * 用途：在执行实际的视频处理之前，应用数字水印，并记录处理步骤
     * 参数：
     *   task - 待处理的视频任务
     * 抛出：
     *   如果处理过程中发生错误，则抛出异常
     */
    @Override
    public void process(VideoTask task) throws Exception {
        // 前置处理
        log.info("处理水印...");

        // 执行被装饰对象处理
        processor.process(task);

        // 后置处理（记录指标）
        task.setProcessingSteps(task.getProcessingSteps() + "添加水印");
    }

    /**
     * 获取处理器名称的方法
     * 用途：提供一个字符串标识，用于识别当前的处理器
     * 返回：
     *   一个字符串，表示当前处理器的名称"WatermarkProcessor"
     */
    @Override
    public String getProcessorName() {
        return "WatermarkProcessor";
    }
}